package com.zenithmind.mall.service;

/**
 * 优惠券使用服务接口 - 遵循接口隔离原则，专门负责优惠券的使用和退还操作
 * 
 * @author ZenithMind Team
 * @since 2025-07-03
 */
public interface CouponUsageService {

    /**
     * 使用优惠券
     * 
     * @param userCouponId 用户优惠券ID
     * @param orderId 订单ID
     * @return 是否成功
     */
    Boolean useCoupon(String userCouponId, String orderId);

    /**
     * 退还优惠券
     * 
     * @param userCouponId 用户优惠券ID
     * @return 是否成功
     */
    Boolean returnCoupon(String userCouponId);

    /**
     * 批量使用优惠券
     * 
     * @param userCouponIds 用户优惠券ID列表
     * @param orderId 订单ID
     * @return 是否成功
     */
    Boolean useCoupons(java.util.List<String> userCouponIds, String orderId);

    /**
     * 批量退还优惠券
     * 
     * @param userCouponIds 用户优惠券ID列表
     * @return 是否成功
     */
    Boolean returnCoupons(java.util.List<String> userCouponIds);

    /**
     * 锁定优惠券（下单时临时锁定）
     * 
     * @param userCouponId 用户优惠券ID
     * @param orderId 订单ID
     * @return 是否成功
     */
    Boolean lockCoupon(String userCouponId, String orderId);

    /**
     * 解锁优惠券（取消订单时释放）
     * 
     * @param userCouponId 用户优惠券ID
     * @return 是否成功
     */
    Boolean unlockCoupon(String userCouponId);

    /**
     * 检查优惠券是否被锁定
     * 
     * @param userCouponId 用户优惠券ID
     * @return 是否被锁定
     */
    Boolean isCouponLocked(String userCouponId);
}
